package org.sky.hibernate.jdbc;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.JdbcTemplate;

public interface Jdbc {
	
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate);
	
	/**执行sql
	 * @param sql
	 * @return
	 */
	public int execute(String sql);
	
	/**执行sql，可使用sql
	 * @param sql
	 * @param args
	 * @return
	 */
	public int execute(String sql, Object... args);
	
	/**统计
	 * @param sql
	 * @param args
	 * @return
	 */
	public long stat(String sql, Object... args);
	
	/**查找
	 * @param sql
	 * @param clazz
	 * @param args
	 * @return
	 */
	public <T> T find(String sql, Class<T> clazz, Object... args);

	/**查找
	 * @param sql
	 * @param clazz
	 * @param args
	 * @return
	 */
	public <T> List<T> query(String sql, Class<T> clazz, Object... args);
	
	/**分页
	 * @param sql
	 * @param count
	 * @param clazz
	 * @param args
	 * @return
	 */
	public <T> PageHelper<T> query(String sql, String tableName, Class<T> clazz, Object... args);
	
	/**命名更新
	 * @param namedSql
	 * @param bean
	 * @return
	 */
	public <T> int updateNamed(String namedSql, T bean);
	

	/**批量命名更新
	 * @param namedSql
	 * @param beans
	 * @return
	 */
	public <T> int[] updateNamed(String namedSql, List<T> beans);
	
	/**命名更新
	 * @param namedSql
	 * @param paramMap
	 * @return
	 */
	public int updateNamedMap(String namedSql, Map<String, Object> paramMap);
	
	/**批量命名更新
	 * @param namedSql
	 * @param paramMaps
	 * @return
	 */
	public int[] updateNamedMap(String namedSql, List<Map<String, Object>> paramMaps);
}